const { Op } = require("sequelize")
const Cart = require("../model/cart.model")
const Goods = require('../model/goods.model')
class CartService {
    async createOrUpdate(user_id, goods_id) {
        // 根据user_id和goods_id同时查找，有没有记录
        let res = await Cart.findOne({
            where:{
                [Op.and]: {
                    user_id,
                    goods_id
                }
            }
        })
       if (res) {
           //已经存在
           await res.increment('number')
           return await res.reload()
       } else {
          return await Cart.create({
              user_id,
              goods_id,
          })
       }
    }
    
    async goodsIsExists(goods_id) {
         // 先从数据库查找是否有该商品编号
        let res = await Goods.findOne({
            attributes: ['goods_name'],
            where: {id: goods_id}
        })
        console.log("结果为", res);
        return res
    }

    async findCarts(pageNum, pageSize) {
        const offset = (pageNum - 1) * pageSize
        const {count, rows} = await Cart.findAndCountAll({
            attributes: ['id', 'number', 'selected'],
            offset: offset,
            limit: pageSize * 1,
            include: {
                model: Goods,
                as: 'goods_info',
                attributes: ['id', 'goods_name', 'goods_price', 'goods_img']
            }
        })

        return {
            pageNum,
            pageSize,
            total: count,
            list: rows
        }
    }

    async updateCarts(params) {
        const { id, number, selected } = params

        const res = await Cart.findByPk(id)
        if (!res) return ''

        number !== undefined ? (res.number = number) : ''
        selected !== undefined ? (res.selected = selected) : ''

        return await res.save()
    }

    async removeCarts(ids) {
       return await Cart.destroy({
            where: {id: {
                [Op.in]: ids
            }}
        })
    }

    async selectAllCarts(user_id, status) {
        return await Cart.update({
            selected: status
        }, 
        {
            where: {
                user_id,
            }
        })
    }
}

module.exports = new CartService()